package tugou

// import (
// 	//	"sync"
// 	"errors"
// 	//	"reflect"
// 	//	"strings"
// 	//	"reflect"
// 	"time"
// 	"tugou/logs"
// 	"tugou/utils"
// )

// //初始化-> 绑定-> 扩展初始化 或 运行
// type Module struct {
// 	id      string //模块ID
// 	name    string //模块名称
// 	handler handler
// 	closeUp chan bool                    //关闭
// 	isInit  bool                         //是否已经初始化了
// 	players map[string]*playerGateOrHome //注册的玩家
// 	msg     chan messageModule
// 	join    chan gatePlayerJoin
// 	quit    chan gateInfo
// 	ticker  *time.Ticker  //定时器
// 	manage  ManageMoudleI //模块管理
// 	extend  ModuleI       //
// }

// //外部调用
// func (this *Module) GetId() string {
// 	return this.id
// }
// func (this *Module) SetId(id string) { //设置ID只能初始化的时候使用
// 	if !this.isInit {
// 		this.id = id
// 	}

// }

// func (this *Module) OnClose() {
// 	this.closeUp <- true
// }

// func (this *Module) run(extend ModuleI, manage ManageMoudleI, data interface{}) error { //运行
// 	this.init(extend, manage, data)
// 	err := this.extend.OnInit(data)
// 	if err != nil {
// 		return err
// 	}
// 	if err == Err_Hander_No_Find_Handler || err == Err_Hander_No_Find_ClassHander {
// 		return this.Run()
// 	} else if err != nil {
// 		return err
// 	}
// 	return nil
// }
// func (this *Module) Run() error { //实际运行
// 	err := this.manage.joinModule(this.extend)
// 	if err != nil {
// 		return err
// 	}
// 	this.isInit = true
// 	go this.read()
// 	return nil
// }

// func (this *Module) QuitPlayer(id string, data interface{}) error { //退出玩家
// 	player, ok := this.players[id]
// 	if ok {
// 		err := player.Quit()
// 		if err != nil {
// 			return err
// 		}
// 	} else {
// 		return errors.New("没有找到改玩家")
// 	}
// 	return nil
// }

// //内部调用
// func (this *Module) init(extend ModuleI, manage ManageMoudleI, data interface{}) { //注册
// 	this.id = utils.NewId()
// 	cache := 1
// 	if Default_Module_CHAN_CACHE > 1 {
// 		cache = Default_Module_CHAN_CACHE
// 	}
// 	this.msg = make(chan messageModule, cache)
// 	// this.manage = manage
// 	this.extend = extend
// 	this.name = extend.OnGetName()
// 	this.ticker = time.NewTicker(time.Second)
// 	this.ticker.Stop()
// 	this.bind(extend, Func_Net_Perfix, Func_Loc_PerFix)
// 	this.players = make(map[string]*playerGateOrHome)
// 	this.join = make(chan gatePlayerJoin)
// 	this.quit = make(chan gateInfo)
// 	this.closeUp = make(chan bool)

// }
// func (this *Module) OnGetName() string {
// 	return this.name
// }
// func (this *Module) setName(name string) {
// 	this.name = name
// }
// func (this *Module) bind(extend ModuleI, netPerfix string, locPerfix string) { //绑定扩展
// 	this.handler.bind(extend, netPerfix, locPerfix)
// }
// func (this *Module) read() { //读取
// 	for {
// 		select {
// 		case msg := <-this.msg:
// 			logs.Debug("模块收到消息", msg)
// 			switch msg.route {
// 			case msg_Route_ClientToServer: //客户端到服务器
// 				err := this.handler.callAsync(Func_Net_Perfix, msg.funcName, msg.data)
// 				if err != nil {
// 					logs.Error(err)
// 				}
// 			case msg_Route_ServerToServer: //服务端到服务器端
// 				err := this.handler.callAsync(Func_Loc_PerFix, msg.funcName, msg.data)
// 				if err != nil {
// 					logs.Error(err)
// 				}
// 			default:
// 				logs.Error("没有找到 route")
// 			}
// 		case join := <-this.join:
// 			p := &playerGateOrHome{}
// 			ok := this.extend.OnPlayerJoin(p, join.request)
// 			if ok {
// 				if join.reply != nil {
// 					join.reply <- true //允许加入
// 					p.module = this
// 					p.gatePlayer = join.gatePlayer
// 					p.state = Gate_state_gate
// 					this.players[join.gateInfo.I] = p
// 				}

// 			} else {
// 				if join.reply != nil {
// 					join.reply <- false //不允许加入
// 				}
// 			}
// 		case <-this.ticker.C:
// 			this.extend.OnUpdate()

// 		case <-this.closeUp:
// 			goto OVER
// 		}
// 	}
// OVER:
// 	//这里差通知玩家模块
// }

// func (this *Module) getGateInfo() gateInfo {
// 	info := gateInfo{}
// 	info.I = this.id
// 	info.N = this.name
// 	return info
// }
// func (this *Module) getGateModule() gateModule {
// 	gate := gateModule{}
// 	gate.gateInfo = this.getGateInfo()
// 	gate.msg = this.msg
// 	gate.join = this.join
// 	gate.quit = this.quit
// 	return gate
// }

// func (this *Module) Close() { //关闭

// }
// func (this *Module) StartUpdate(duration time.Duration) { //开始定时回调
// 	this.ticker = time.NewTicker(duration)
// }
// func (this *Module) StopUpdate() { //停止定时回调
// 	this.ticker.Stop()
// }

// //外部替换回调

// func (this *Module) OnPlayerDisconnect(id string) {
// 	logs.Debug("模块玩家掉线来")
// }
// func (this *Module) OnPlayerJoin(playerIn, data interface{}) bool {
// 	return true
// }
// func (this *Module) OnPlayerQuit(id string) {

// }
// func (this *Module) OnUpdate() { //更新默认函数

// }
// func (this *Module) OnInit(data interface{}) error {
// 	return nil
// }
